// 智谱AI配置
const API_KEY = '72ce69f25ea53fc2b55e0d9faa0d98fa.QCbOt7m9MZB74CBT'
const API_URL = 'https://open.bigmodel.cn/api/paas/v4/chat/completions'

// 将图片转为base64
function imageToBase64(filePath) {
  return new Promise((resolve, reject) => {
    wx.getFileSystemManager().readFile({
      filePath,
      encoding: 'base64',
      success: res => {
        resolve(res.data)
      },
      fail: err => {
        reject(err)
      }
    })
  })
}

// 从响应中提取 content 并解析
function parseMarkdownJSON(content) {
  try {
    // 1. 移除 markdown 代码块标记
    let jsonStr = content.replace(/```json\s*|\s*```/g, '')
    
    // 2. 移除可能存在的换行符和空格
    jsonStr = jsonStr.trim()
    
    // 3. 修复未加引号的音标
    jsonStr = jsonStr.replace(/: *\/(.*?)\/,/g, ': "/$1/",')
    jsonStr = jsonStr.replace(/: *\/(.*?)\/}/g, ': "/$1/"}')

    // 4. 解析 JSON
    const result = JSON.parse(jsonStr)

    // 5. 处理不同的数据结构
    if (Array.isArray(result)) {
      return result
    } else if (result.words && Array.isArray(result.words)) {
      return result.words
    } else {
      throw new Error('数据格式错误')
    }
  } catch (err) {
    console.error('解析失败:', err)
    console.error('原始内容:', content)
    console.error('处理后的JSON字符串:', jsonStr)
    throw new Error('返回数据格式错误')
  }
}

// 调用智谱AI接口识别图片
export async function recognizeImage(filePath) {
  try {
    const base64Image = await imageToBase64(filePath)
    console.log('开始调用AI接口...')

    const requestData = {
      model: "glm-4v-flash",
      stream: false,
      messages: [
        {
          role: "user",
          content: [
            {
              type: "image_url",
              image_url: {
                url: `data:image/jpeg;base64,${base64Image}`
              }
            },
            {
              type: "text",
              text: "描述图片，并从中挑选5个以上单词，并以标准的JSON数组格式返回：[{word: '单词', phonetic: '音标', translation: '翻译', example: '例句'}]。"
            }
          ]
        }
      ],
      temperature: 0.7,
      top_p: 0.7,
      max_tokens: 1024
    }

    // 使用 Promise 包装 wx.request
    const response = await new Promise((resolve, reject) => {
      wx.request({
        url: API_URL,
        method: 'POST',
        header: {
          'Authorization': `Bearer ${API_KEY}`,
          'Content-Type': 'application/json'
        },
        data: requestData,
        timeout: 30000,
        success: (res) => {
          console.log('API响应成功:', res)
          resolve(res)
        },
        fail: (err) => {
          console.error('API请求失败:', err)
          reject(err)
        }
      })
    })

    console.log('API响应状态:', response.statusCode)
    console.log('API响应数据:', response.data)

    if (response.statusCode !== 200) {
      console.error('API错误状态码:', response.statusCode)
      console.error('API错误信息:', response.data)
      throw new Error(`API请求失败: ${response.statusCode}`)
    }

    // 从响应中提取并解析数据
    const content = response.data.choices[0].message.content
    console.log('API返回原始内容:', content)

    // 解析 markdown JSON
    const result = parseMarkdownJSON(content)
    console.log('解析后的数据:', result)

    // 返回处理后的数据
    return {
      success: true,
      data: {
        words: result.map(item => ({
          word: item.word,
          phonetic: item.phonetic,
          translation: item.translation,
          example: item.example,
          audioUrl: `https://dict.youdao.com/dictvoice?audio=${item.word}&type=1`
        }))
      }
    }

  } catch (err) {
    console.error('完整错误信息:', err)
    console.error('错误堆栈:', err.stack)
    return {
      success: false,
      error: err.message || '识别失败，请重试'
    }
  }
} 